package 数组;

/**
 * @author: 大怪
 * @email: 962527441@qq.com
 */

import java.util.HashMap;

/**
 * 题目:
 * 给定一个整数数组和一个整数 k ，请找到该数组中和为 k 的连续子数组的个数。
 *
 * 示例 1 :
 *
 * 输入:nums = [1,1,1], k = 2
 * 输出: 2
 * 解释: 此题 [1,1] 与 [1,1] 为两种不同的情况
 */
public class 和为k的子数组 {
    class Solution {
        public int subarraySum(int[] nums, int k) {
            HashMap<Integer, Integer> map = new HashMap();
            int cnt = 0;
            int sum = 0;
            map.put(0,1);
            for (int i : nums) {
                sum += i;
                if (map.containsKey(sum-k)) {
                    cnt += map.get(sum-k);
                }
                map.put(sum,map.getOrDefault(sum, 0)+1);
            }
            return cnt;
        }
    }
}
